无法将JSON响应发送到其他活动并将其显示在吐司中

时间:2017-07-03 12:02:41

标签: java android json android-asynctask

我能够将json数据注册到我的服务器,我甚至得到了响应,但是无法在吐司中显示它并将其发送到其他活动(主要活动)。

我将响应转换为字符串并尝试使用getter发送到我的mainactivity但是我无法在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中获得响应,因此我将其删除并考虑将其转换为字符串并使用getter发送并在其他活动中解析它。我能够在代码中看到上面提到的log.i("o/p")中的响应,但我不知道为什么它没有被发送。

这是我的主要活动代码:

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);

}
}

我看到的吐司是空的。

1 个答案:

答案 0 :(得分:0)

<强>解释

因为您要创建两个SendJsonDataToServer

的不同对象

首先:

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

第二

SendJsonDataToServer S = new SendJsonDataToServer();

因此这两个对象将获得不同的内存分配。当你得到这个代码的回复时

String Jr = S.getJR();

然后您将获得从您获得响应的对象在不同对象中创建的响应。所以Jr显然是空的。这就是为什么你不能打印你期望的响应。

解决方案:

首先:

您需要执行

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

in

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

方法就像这样。

<强>第二

如果您想将此结果发送到第二个活动,那么您应该在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);
}

并使用onCreate()

UserAreaActivity方法编写此代码
Bundle bundle = getIntent().getExtras();
String result = bundle.getString("result");
Toast.makeText(UserAreaActivity.this, result, Toast.LENGTH_LONG).show();

现在,您可以在此活动中使用结果。