Wenn Sie diese Schritte befolgen, um OKHTTP zu implementieren, dann werden Sie definitiv mehrere API auf mehreren Bildschirm aufrufen, indem nur zwei Zeilen Code Anwendung
UpdateListener updateListener = new UpdateListener(HitAPIActivity.this, baseHTTPRequest);
updateListener.getJsonData();
Schritt 1:
baseHTTPRequest = new BaseHTTPRequest();
// baseHTTPRequest.setURL("https://api.geonames.org/citiesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demohttps://api.geonames.org/citiesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo");
baseHTTPRequest.setURL("http://jsonparsing.parseapp.com/jsonData/moviesDemoItem.txt");
baseHTTPRequest.setRequestCode(reqType);
baseHTTPRequest.setCachedRequired(true);
UpdateListener updateListener = new UpdateListener(HitAPIActivity.this, baseHTTPRequest);
updateListener.executeRequest();
Schritt 2: Erstellen Sie eine Anfrage Klasse
/** * Erstellt von Deepak Sharma am 07.04.16. * Dies ist eine HTTP-Anfrage-Klasse, die die grundlegenden Parameter hat. * Wenn Sie weitere Parameter hinzufügen möchten, erstellen Sie eine Unterklasse dieser Klasse * und fügen Sie sie mit Ihrer Unterklasse hinzu. Ändern Sie diese Klasse nicht. */
public class BaseHTTPRequest<T> {
private Context context;
private String URL;
private int requestCode;
private List<T> listParameters;
private String header;
private boolean isCachedRequired;
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public void setURL(String URL) {
this.URL = URL;
}
public String getURL() {
return URL;
}
public int getRequestCode() {
return requestCode;
}
public void setRequestCode(int requestCode) {
this.requestCode = requestCode;
}
public List<T> getListParameters() {
return listParameters;
}
public void setListParameters(List<T> listParameters) {
this.listParameters = listParameters;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public boolean isCachedRequired() {
return isCachedRequired;
}
public void setCachedRequired(boolean cachedRequired) {
isCachedRequired = cachedRequired;
}
}
Schritt 4: Erstellen einer Listener-Klasse
Import android.util.Log; importieren com.google.gson.Gson; Import java.io.IOException; Importieren Sie dxswifi_direct.com.wifidirectcommunication.base.model.request.BaseHTTPRequest; importieren okhttp3.Call; importieren okhttp3.MediaType; importieren okhttp3.OkHttpClient; importieren okhttp3.Callback; importieren okhttp3.Request; importieren okhttp3.RequestBody; importieren okhttp3.Response;
/** * Erstellt von Deepak Sharma am 07.04.16. * @email: [email protected] * Dies ist eine einfache Java-Klasse, die Ihnen für HTTP-Anfrage/Antwort hilft und es wird * werfen Sie die Antwort auf Ihre Korrespondenz Aktivität. */
public class UpdateListener {
private OnUpdateViewListener onUpdateViewListener;
OkHttpClient okHttpClient = new OkHttpClient();
BaseHTTPRequest mRequestModel;
private String mURL = null;
private Request mRequest = null;
public interface OnUpdateViewListener {
void updateView(String responseString, boolean isSuccess,int reqType);
}
public UpdateListener(OnUpdateViewListener onUpdateView, final BaseHTTPRequest requestModel) {
this.mRequestModel = requestModel;
this.onUpdateViewListener = onUpdateView;
if (requestModel.isCachedRequired())
{
/*File httpCacheDirectory = new File(requestModel.getContext().getCacheDir(), "responses");
Cache cache = null;
cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
if (cache != null) {
okHttpClient.setCache(cache);
}*/
}
/*mURL = null;
if (requestModel.getListParameters()!=null && requestModel.getListParameters().size()>0)
{
HttpUrl.Builder urlBuilder = HttpUrl.parse(requestModel.getURL()).newBuilder();
List<RequestParameter> requestParameters = requestModel.getListParameters();
for (int i=0; i<requestParameters.size();i++)
{
urlBuilder.addQueryParameter(requestParameters.get(i).getKey(),requestParameters.get(i).getValue());
}
mURL = urlBuilder.build().toString();
}
else
{
mURL = requestModel.getURL();
}*/
mURL = requestModel.getURL();
if (mRequestModel.getListParameters()!=null && mRequestModel.getListParameters().size()>1)
{
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
mRequest = new Request.Builder()
.url(mURL)
.post(RequestBody.create(JSON, new Gson().toJson(BaseHTTPRequest.class)))
.build();
}
else
{
mRequest = new Request.Builder()
.url(mURL)
.build();
}
}
public void executeRequest()
{
Call call = okHttpClient.newCall(mRequest);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
onUpdateViewListener.updateView(NetworkException.getErrorMessage(e), false, mRequestModel.getRequestCode());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) {
// You can also throw your own custom exception
throw new IOException("Unexpected code " + response);
} else {
Log.i("Response:",response.toString());
Log.i("Response body:",response.body().toString());
Log.i("Response message:",response.message());
onUpdateViewListener.updateView(response.body().string(),true, mRequestModel.getRequestCode());
}
// do something wih the result
}
});
}
}
Schritt 5: Von der Aktivität, die Sie anfordern, implementieren Zuhörer
public class HitAPIActivity extends AppCompatActivity implements View.OnClickListener, UpdateListener.OnUpdateViewListener{
@Override
public void updateView(final String responseString, boolean isSuccess, int reqType) {
if (isSuccess)
{
if (!responseString.contains("failure")
&& !responseString.contains("Error")) {
// Handle request on the basis of Request Type.
switch (reqType) {
case ApiConstants.GET_CONTACTS:
break;
default:
break;
}
}
}
}
möglich Duplikat [android.os.NetworkOnMainThreadException] (http://stackoverflow.com/questions/6343166/ android-os-networkonmainthreadexception) Hast du überhaupt darüber nachgedacht, zuerst zu suchen? – Simon
Es hat nichts damit zu tun .. Lesen Sie die Frage noch einmal. Besonders beschmutzte Teile. Denkst du darüber nach, zuerst zu lesen? –
Ich habe die Frage gelesen und es hat alles damit zu tun. Sie sind Dong Netzwerk IO auf dem Hauptthread. Es spielt keine Rolle, was Sie ** denken ** die Bibliothek tut, es gibt nur eine Ursache für diese Ausnahme. – Simon