2017-10-24 7 views
0

ここに私のコードがあります。null配列エラー

package com.example.onewdivide.fortunecookiesnew; 

import android.content.Intent; import android.os.AsyncTask; import 
android.support.v7.app.AppCompatActivity; import android.os.Bundle; 
import android.util.Log; import android.view.Menu; import 
android.view.MenuInflater; import android.view.MenuItem; import 
android.view.View; import android.widget.ImageButton; import 
android.widget.ImageView; import android.widget.TextView; 

import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; 

import java.lang.reflect.Type; import java.util.Collection; 

import okhttp3.OkHttpClient; import okhttp3.Request; import 
okhttp3.Response; 

public class Process extends AppCompatActivity { 

    ImageButton MakeAWish; 
    TextView TextAtB; 
    TextView TextAtCookies; 
    TextView TextAtDate; 
    TextView TextAtResult; 
    ImageView Cookies; 
    String meanning; 
    String[] ResultFromRequest; 
    int Check; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_process); 

     MakeAWish = (ImageButton) findViewById(R.id.Button); 
     MakeAWish.setOnClickListener(myhandler1); 

     TextAtB = (TextView) findViewById(R.id.textatbutton); 
     TextAtCookies = (TextView)findViewById(R.id.resultatpic); 
     TextAtDate = (TextView)findViewById(R.id.date); 
     TextAtResult = (TextView)findViewById(R.id.textView7); 

     Cookies = (ImageView)findViewById(R.id.imageView); 
     Log.d("Debug this","zero"); 
     Check = 0; 

    } 

    public class JSONTask extends AsyncTask<String[], Void, CookiesResponse[]> { 

     @Override 
     protected CookiesResponse[] doInBackground(String[]... strings) { 

      try{ 
       OkHttpClient client = new OkHttpClient(); 
       Request request = new Request.Builder().url("www.atilal.info/cookies.php").build(); 

       Response response = client.newCall(request).execute(); 
       String result = response.body().string(); 

       Gson gson = new Gson(); 

       Type collectionType = new TypeToken<Collection<CookiesResponse>>() {}.getType(); 
       Collection<CookiesResponse> enums = gson.fromJson(result, collectionType); 
       CookiesResponse[] cookiesResult = enums.toArray(new CookiesResponse[enums.size()]); 

       String[] resultlast = {cookiesResult[0].getMeaning(),cookiesResult[0].getMessage()}; 
       Log.d("Debug this","two"); 
       ResultFromRequest = resultlast; 
       return cookiesResult; 

      }catch (Exception e){ 

      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(CookiesResponse[] s){ 
      super.onPostExecute(s); 


     } 

    } 

    View.OnClickListener myhandler1 = new View.OnClickListener() { 
     public void onClick(View v) { 
      Check+=1; 
      new JSONTask().execute(); 
      if(Check==1){ 
       Log.d("Debug this","one"); 

       TextAtCookies.setText(ResultFromRequest[0]); 
       TextAtResult.setText("Result : "+ ResultFromRequest[0]); 
       meanning = ResultFromRequest[1]; 
       TextAtB.setText("SAVE"); 

      } 

     } 
    }; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.mainmenu, menu); 
     return true; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_name) { 
      Intent intent = new Intent(this, MainActivity.class); 
      startActivity(intent); //   return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

} 

私のボタンをクリックすると。それは致命的な例外を持つでしょう。それは

10-25 02:15:05.804 9777-9809/com.example.onewdivide.fortunecookiesnew E/OpenGLRenderer: allen debug liyu Key: 68724719680 
10-25 02:15:06.426 9777-9777/com.example.onewdivide.fortunecookiesnew E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.onewdivide.fortunecookiesnew, PID: 9777 
    java.lang.NullPointerException: Attempt to read from null array 
     at com.example.onewdivide.fortunecookiesnew.Process$1.onClick(Process.java:104) 
     at android.view.View.performClick(View.java:5646) 
     at android.view.View$PerformClick.run(View.java:22459) 
     at android.os.Handler.handleCallback(Handler.java:761) 
     at android.os.Handler.dispatchMessage(Handler.java:98) 
     at android.os.Looper.loop(Looper.java:156) 
     at android.app.ActivityThread.main(ActivityThread.java:6523) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 10-25 
02:15:06.435 9777-9777/com.example.onewdivide.fortunecookiesnew I/Process: Sending signal. PID: 9777 SIG: 9 
+1

あなたの質問は何ですか? いずれの場合でも、 'ResultFromRequest = resultlast;' ** never ** get'の行が表示され、結果として 'ResultFromRequest' _ **はインスタンス化されません** _。 「ResultFromRequest」がインスタンス化されない理由は、あなたの 'try'ブロック内で例外が発生したためです。そして、あなたは現在そのブロックの中の例外を無視しているので、あなたはそれを知らない。 –

答えて

1

あなたAsyncTaskは非同期に実行されると言うのです、あなたはそれが設定される前に、アレイを読み取ろうとしています。

移動方法onPostExecuteにあなたからOnClickListenerに、このコード:このコードはAsyncTask終了後に呼び出されます

@Override 
protected void onPostExecute(CookiesResponse[] s){ 
    if(Check==1){ 
     Log.d("Debug this","one"); 

     TextAtCookies.setText(ResultFromRequest[0]); 
     TextAtResult.setText("Result : "+ ResultFromRequest[0]); 
     meanning = ResultFromRequest[1]; 
     TextAtB.setText("SAVE"); 

    } 
} 

+0

したがって、私はこのgson(CookiesResponse)を配列に変換してからonpostExecuteに送信しようとします。それはよさそうだ?? –

+0

はい、そのようにして、クラス変数、niceソリューションは必要ありません。 –

+0

String [] resultlast = {cookiesResult [0] .getMeaning()、cookiesResult [0] .getMessage()}; このように変換しますが、まだnullpointerExceptionがあります。私が間違っている? –