2017-04-20 7 views
0

私はアンドロイドを使用して初心者の訓練のモバイルです。 私はエラーを見つけたので、私は問題を解決できません。 は私が...これは私のコードであるどのように私はandroid.os.NetworkOnMainThreadExceptionエラーを避けることができます

android.os.NetworkOnMainThreadException 
                      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303) 
                      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333) 
                      at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196) 
                      at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) 
                      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356) 
                      at java.net.Socket.connect(Socket.java:605) 
                      at com.squareup.okhttp.internal.Platform$Android.connectSocket(Platform.java:190) 
                      at com.squareup.okhttp.Connection.connectSocket(Connection.java:196) 
                      at com.squareup.okhttp.Connection.connect(Connection.java:172) 
                      at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:367) 
                      at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) 
                      at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328) 
                      at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245) 
                      at com.squareup.okhttp.Call.getResponse(Call.java:267) 
                      at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224) 
                      at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195) 
                      at com.squareup.okhttp.Call.execute(Call.java:79) 
                      at com.jfdimarzio.httpreqest.MainActivity$HttpTest.doPostRequest(MainActivity.java:84) 
                      at com.jfdimarzio.httpreqest.MainActivity.login(MainActivity.java:57) 
                      at com.jfdimarzio.httpreqest.MainActivity$1.onClick(MainActivity.java:44) 
                      at android.view.View.performClick(View.java:5637) 
                      at android.view.View$PerformClick.run(View.java:22429) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

アンドロイドMornitorで、これは誤りである 、Androidのトレーニング中にNetworkOnMainThreadExceptionを避けるために

//AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.jfdimarzio.httpreqest"> 

    <!-- To auto-complete the email text field in the login form with the user's emails --> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

を試してみました/// /MainActivity.java

package com.jfdimarzio.httpreqest; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.VectorEnabledTintResources; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.squareup.okhttp.Call; 
import com.squareup.okhttp.MediaType; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.RequestBody; 
import com.squareup.okhttp.Response; 

import org.json.JSONObject; 

import java.io.IOException; 


public class MainActivity extends AppCompatActivity { 

    private Button login_btn ; 
    private EditText username_view; 
    private EditText email_view; 
    private EditText password_view; 

    OkHttpClient client = new OkHttpClient(); 

    private String username, password, email; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     username_view = (EditText) findViewById(R.id.username); 
     password_view = (EditText) findViewById(R.id.password); 
     email_view = (EditText) findViewById(R.id.email); 
     login_btn = (Button) findViewById(R.id.login_btn); 
     login_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       login(); 
      } 
     }); 
    } 

    protected void login() { 
     username = username_view.getText().toString(); 
     email = email_view.getText().toString(); 
     password = password_view.getText().toString(); 

     HttpTest httpTest = new HttpTest(); 
     String jsonData = httpTest.bowlingJson(username, email, password); 
     try { 
      String response = httpTest.doPostRequest("http://172.16.32.61/login/login.php", jsonData); 
      Toast.makeText(getBaseContext(), "Respond: " + response, Toast.LENGTH_SHORT).show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } 

    private class HttpTest { 
     OkHttpClient client = new OkHttpClient(); 
     public final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 
     String doPostRequest(String url) throws IOException { 
      Request reqest = new Request.Builder() 
        .url(url) 
        .build(); 
      Response response = client.newCall(reqest).execute(); 
      return response.body().toString(); 
     } 

     String doPostRequest(String url, String json) throws IOException { 
      RequestBody body = RequestBody.create(JSON, json); 
      Request request = new Request.Builder() 
        .url(url) 
        .post(body) 
        .build(); 
      Call call = client.newCall(request); 
      Response response = call.execute(); 
      return response.body().string(); 
     } 

     String bowlingJson(String username, String email, String password) { 
      String json = "{'username':'" + username + "'," 
        + "'email':'" + email + "'," 
        + "'password':'" + password + "'}"; 

      Toast.makeText(getBaseContext(), json, Toast.LENGTH_SHORT).show(); 
      return json; 
     } 
    } 
} 

答えて

0

この例外は、アプリケーションがメインスレッドでネットワーク操作を実行しようとするとスローされます。 AsyncTaskでコードを実行してください:

+1

asynctaskは学習を始めるにはとても良いですが、[pitfalls](http://blog.danlew.net/2014/06/21/the-hidden-pitfalls-of-asynctask /) –

+0

ありがとうございました:) –

+0

ありがとうございました。成功! –

関連する問題