1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-02 17:56:56 +01:00

fixed some crashes

This commit is contained in:
Mariotaku Lee 2015-06-12 16:36:40 +08:00
parent 7d9c4bc0b0
commit 095f499b1c
5 changed files with 98 additions and 17 deletions

View File

@ -39,11 +39,11 @@ android {
dependencies {
apt 'com.bluelinelabs:logansquare-compiler:1.1.0'
apt 'com.hannesdorfmann.parcelableplease:processor:1.0.1'
compile 'com.android.support:support-annotations:22.1.1'
compile 'com.android.support:support-v4:22.1.1'
compile 'com.android.support:support-annotations:22.2.0'
compile 'com.android.support:support-v4:22.2.0'
compile 'com.bluelinelabs:logansquare:1.1.0'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'com.github.mariotaku:RestFu:6ef0913'
compile 'com.github.mariotaku:RestFu:c8bd230561'
compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.1'
compile project(':twidere.component.querybuilder')
compile fileTree(dir: 'libs', include: ['*.jar'])

View File

@ -740,8 +740,14 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
}
private SignInResponse authxAuth() throws TwitterException {
final String versionSuffix = noVersionSuffix ? null : "1.1";
final Endpoint endpoint = new Endpoint(TwitterAPIFactory.getApiUrl(apiUrlFormat, "api", versionSuffix));
String endpointUrl, signEndpointUrl;
endpointUrl = TwitterAPIFactory.getApiUrl(apiUrlFormat, "api", null);
if (!sameOAuthSigningUrl) {
signEndpointUrl = TwitterAPIFactory.getApiUrl(DEFAULT_TWITTER_API_URL_FORMAT, "api", null);
} else {
signEndpointUrl = endpointUrl;
}
Endpoint endpoint = new OAuthEndpoint(endpointUrl, signEndpointUrl);
OAuthAuthorization auth = new OAuthAuthorization(consumerKey.getOauthToken(), consumerKey.getOauthTokenSecret());
final TwitterOAuth oauth = TwitterAPIFactory.getInstance(context, endpoint, auth, TwitterOAuth.class);
final OAuthToken accessToken = oauth.getAccessToken(username, password, TwitterOAuth.XAuthMode.CLIENT);

View File

@ -36,6 +36,7 @@ import android.os.Handler;
import android.os.Parcelable;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.Builder;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
@ -50,6 +51,13 @@ import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.MainActivity;
import org.mariotaku.twidere.activity.MainHondaJOJOActivity;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.TwitterUpload;
import org.mariotaku.twidere.api.twitter.model.MediaUploadResponse;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.api.twitter.model.StatusUpdate;
import org.mariotaku.twidere.api.twitter.model.UserMentionEntity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.MediaUploadResult;
import org.mariotaku.twidere.model.ParcelableAccount;
@ -90,13 +98,6 @@ import java.util.List;
import edu.tsinghua.spice.Utilies.SpiceProfilingUtil;
import edu.tsinghua.spice.Utilies.TypeMappingUtil;
import org.mariotaku.twidere.api.twitter.model.MediaUploadResponse;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.api.twitter.model.StatusUpdate;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.UserMentionEntity;
import org.mariotaku.twidere.api.twitter.TwitterUpload;
import static android.text.TextUtils.isEmpty;
import static org.mariotaku.twidere.util.ContentValuesCreator.createMessageDraft;
@ -543,8 +544,13 @@ public class BackgroundOperationService extends IntentService implements Constan
is = new ContentLengthInputStream(file);
is.setReadListener(new StatusMediaUploadListener(this, mNotificationManager, builder,
statusUpdate));
final MediaUploadResponse uploadResp = upload.uploadMedia(
new FileTypedData(is, file.getName(), file.length(), ContentType.parse(o.outMimeType)));
final ContentType contentType;
if (TextUtils.isEmpty(o.outMimeType)) {
contentType = ContentType.parse("image/*");
} else {
contentType = ContentType.parse(o.outMimeType);
}
final MediaUploadResponse uploadResp = upload.uploadMedia(new FileTypedData(is, file.getName(), file.length(), contentType));
mediaIds[i] = uploadResp.getId();
}
} catch (final FileNotFoundException e) {

View File

@ -367,7 +367,12 @@ public class TwitterAPIFactory implements TwidereConstants {
public static class TwidereExceptionFactory implements ExceptionFactory {
@Override
public Exception newException(Throwable cause, RestHttpRequest request, RestHttpResponse response) {
final TwitterException te = new TwitterException(cause);
final TwitterException te;
if (cause != null) {
te = new TwitterException(cause);
} else {
te = new TwitterException();
}
te.setResponse(response);
return te;
}

View File

@ -19,11 +19,13 @@
package org.mariotaku.twidere.util.net;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Pair;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.Headers;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
@ -34,9 +36,11 @@ import com.squareup.okhttp.ResponseBody;
import org.mariotaku.restfu.Utils;
import org.mariotaku.restfu.http.ContentType;
import org.mariotaku.restfu.http.RestHttpCallback;
import org.mariotaku.restfu.http.RestHttpClient;
import org.mariotaku.restfu.http.RestHttpRequest;
import org.mariotaku.restfu.http.RestHttpResponse;
import org.mariotaku.restfu.http.RestQueuedRequest;
import org.mariotaku.restfu.http.mime.TypedData;
import org.mariotaku.twidere.util.DebugModeUtils;
@ -67,6 +71,11 @@ public class OkHttpRestClient implements RestHttpClient {
@NonNull
@Override
public RestHttpResponse execute(RestHttpRequest restHttpRequest) throws IOException {
final Call call = newCall(restHttpRequest);
return new OkRestHttpResponse(call.execute());
}
private Call newCall(final RestHttpRequest restHttpRequest) {
final Request.Builder builder = new Request.Builder();
builder.method(restHttpRequest.getMethod(), RestToOkBody.wrap(restHttpRequest.getBody()));
builder.url(restHttpRequest.getUrl());
@ -76,8 +85,32 @@ public class OkHttpRestClient implements RestHttpClient {
builder.addHeader(header.first, header.second);
}
}
final Call call = client.newCall(builder.build());
return new OkRestHttpResponse(call.execute());
return client.newCall(builder.build());
}
@Override
public RestQueuedRequest enqueue(final RestHttpRequest request, final RestHttpCallback callback) {
final Call call = newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(final Request request, final IOException e) {
if (call.isCanceled()) {
callback.cancelled();
return;
}
callback.exception(e);
}
@Override
public void onResponse(final Response response) throws IOException {
if (call.isCanceled()) {
callback.cancelled();
return;
}
callback.callback(new OkRestHttpResponse(response));
}
});
return new OkHttpQueuedRequest(client, call);
}
private static class RestToOkBody extends RequestBody {
@ -196,4 +229,35 @@ public class OkHttpRestClient implements RestHttpClient {
body.close();
}
}
private static class OkHttpQueuedRequest implements RestQueuedRequest {
private final OkHttpClient client;
private final Call call;
private boolean cancelled;
public OkHttpQueuedRequest(final OkHttpClient client, final Call call) {
this.client = client;
this.call = call;
}
@Override
public boolean isCancelled() {
return cancelled || call.isCanceled();
}
@Override
public void cancel() {
cancelled = true;
if (Looper.myLooper() != Looper.getMainLooper()) {
call.cancel();
} else {
client.getDispatcher().getExecutorService().execute(new Runnable() {
@Override
public void run() {
call.cancel();
}
});
}
}
}
}