2017-07-03 6 views
-4

jsonデータを自分のサーバーに登録することはできますが、私は応答していますが、トーストで表示したり、他のアクティビティ(主な活動)。JSONレスポンスを他のアクティビティに送信してトーストで表示することはできません

レスポンスを文字列に変換し、ゲッターを使用して主な活動に送信しようとしましたが、私が言及したトーストでさえもLog.iで見ることはできません。ここに私のコードは次のとおりです。

class SendJsonDataToServer extends AsyncTask<String, String, String> { 

String j; 

    @Override 
    protected String doInBackground(String... params) { 

     String JsonResponse = ""; 
     String JsonDATA = params[0]; 
     HttpURLConnection urlConnection = null; 
     BufferedReader reader = null; 
     try { 
      URL url = new URL("http://gstedge.com/test/invoice/api.php?param=signup"); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setDoOutput(true); 
      // is output buffer writter 
      urlConnection.setRequestMethod("POST"); 
      urlConnection.setRequestProperty("Content-Type", "application/json"); 
      urlConnection.setRequestProperty("Accept", "application/json"); 
//set headers and method 
      Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8")); 
      writer.write(JsonDATA); 
// json data 
      writer.close(); 
      InputStream inputStream = urlConnection.getInputStream(); 
//input stream 
      StringBuffer buffer = new StringBuffer(); 
      if (inputStream == null) { 
       // Nothing to do. 
       return null; 
      } 
      reader = new BufferedReader(new InputStreamReader(inputStream)); 

      String inputLine; 
      while ((inputLine = reader.readLine()) != null) 
       buffer.append(inputLine + "\n"); 
      if (buffer.length() == 0) { 
       // Stream was empty. No point in parsing. 
       return null; 
      } 
      JsonResponse = buffer.toString(); 
      j= JsonResponse; 
//response data 
      Log.i("o/p:", JsonResponse); 



//send to post execute 


      } 

     catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (urlConnection != null) { 
       urlConnection.disconnect(); 
      } 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (final IOException e) { 
        Log.e("wtf", "Error closing stream", e); 
       } 
      } 
     } 
     return JsonResponse; 





    } 

私はそれを削除し、文字列でそれを変換し、ゲッターを使用してそれを送信し、他の活動にそれを解析するために考えて、同様onpostexecuteで応答を取得することができませんでした。私はコードで上記のlog.i("o/p")の応答を見ることができますが、私はなぜそれが送られてくるのかわかりません。

は、ここに私のmainactivityコードです:私は見

public class MainActivity extends AppCompatActivity { 

    EditText emailview, numberview, pwview; 
    Button registerview; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     emailview = (EditText) findViewById(R.id.et1); 
     numberview = (EditText) findViewById(R.id.et2); 
     pwview = (EditText) findViewById(R.id.et3); 
     registerview = (Button) findViewById(R.id.btn1); 
    } 

    public void hit(View v) { 
     String email = emailview.getText().toString(); 
     String contact = numberview.getText().toString(); 
     String pw = pwview.getText().toString(); 
     JSONObject a = new JSONObject(); 

     try { 
      a.put("mail", email); 
      a.put("num", contact); 
      a.put("pass", pw); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     if (a.length() > 0) { 
      new SendJsonDataToServer().execute(String.valueOf(a)); 


     } 


     SendJsonDataToServer S = new SendJsonDataToServer(); 
     String Jr = S.getJR(); 
     Log.i("out:",Jr); 
     Toast.makeText(MainActivity.this, Jr, Toast.LENGTH_LONG).show(); 
     Intent i= new Intent(MainActivity.this,UserAreaActivity.class); 
     startActivity(i); 

} 
} 

トーストは空です。

+0

プロの投稿のヒント:自分自身を参照するときに大文字の「I」を使用すると、読みやすくなります。段落のコードについて議論するときは、バックチックを使用して達成される 'thisのようなコードの書式設定 'を使用してください。最後に、しばしばdownvotesの原因であるtxtspkを避けてください。 "please"という単語を入力するのは大きな努力ではありません。 – halfer

答えて

0

説明:

あなたはSendJsonDataToServer

まずの2つの異なるオブジェクト作成しているので:第二

new SendJsonDataToServer().execute(String.valueOf(a)); 

SendJsonDataToServer S = new SendJsonDataToServer(); 

するので、これら2つのオブジェクトは異なるでしょうメモリ割り当て。あなたがこのコードで応答を受け取ったとき

String Jr = S.getJR(); 

あなたが応答したオブジェクトとは異なるオブジェクトで作成された応答を取得します。したがって、Jrは明らかに空です。そのため、あなたが期待する応答を印刷することができないのです。

ソリューション:

まず:あなたはあなたのAsyncTask

Toast.makeText(MainActivity.this, Jr, Toast.LENGTH_LONG).show(); 

@Override 
protected void onPostExecute(String result) { 
    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); 
} 

でメソッドを実行する必要が

このような。

第二:

あなたの第二の活動には、この結果を送信する場合、あなたはあなたのonPostExecute方法でこのようなコードを書く必要があります。

@Override 
protected void onPostExecute(String result) { 
    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); 
    Intent i = new Intent(MainActivity.this, UserAreaActivity.class); 
    i.putExtra("result", result); 
    startActivity(i); 
} 

UserAreaActivity

Bundle bundle = getIntent().getExtras(); 
String result = bundle.getString("result"); 
Toast.makeText(UserAreaActivity.this, result, Toast.LENGTH_LONG).show(); 

onCreate()方法でこのコードを書くには、今、あなたはこの活動に結果を使用することができます。

+0

私の友人は同じことを私に言いました。私たちはそれを解決しましたが、私はあなたの答えを受け入れています。それは同じで正しい。ありがとう:) – Robin10

関連する問題