0

嗨,我是 Android 编程新手,建议使用 AsyncTask 进行网络连接。在将它们添加到 doInBackground 之前,我在工作的区域收到错误:

(前无法解决)- 在 catch 部分

和 onPostExecute:

标记 ")" 的语法错误,;预期-for(字符串结果)

(Toast 类型中的方法 makeText(Context, CharSequence, int) 不适用于参数 (LongOperation, String, int))- 对于 Toast.makeText

这些错误与我放置代码的位置有关吗?我真的很欢迎任何适合我的代码的答案。

package com.example.clearlight;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
import android.widget.Toast;

import java.net.URL;

import org.apache.http.client.ResponseHandler;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.StrictMode;
import android.util.Log;

public class MainActivity extends Activity {

    TextView txt;

    @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);


        setContentView(R.layout.relative);

        class LongOperation extends AsyncTask<String, Void, String> { 

            @Override
            protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            URL url = null;

            DefaultHttpClient httpclient = null;

            try {

            String registrationUrl = "http://10.0.2.2/SensorInfo/GetLightData?sensor=light";
            url = new URL(registrationUrl);

            HttpGet getRequest = new HttpGet(registrationUrl);
            ResponseHandler<String> handler = new BasicResponseHandler();
            httpclient = new DefaultHttpClient();
            // request data from server
            String result = httpclient.execute(getRequest, handler);
            Log.d("MyApp", "Data from server is "+ result);}

            catch (Exception ex) {Log.e("error",ex.toString());
            ex.printStackTrace();

            }


            @Override
            protected void onPostExecute(String result) 
            {               
              TextView text1 = (TextView) findViewById(R.id.text);

            //Sets the new text to TextView (runtime click event)//*******
            text1.setText("Light Data= " + result);

            Toast.makeText(this, "Light Data:" + result, Toast.LENGTH_SHORT).show(); //MESSAGE BOX
            //txtMessage.setText(String.valueOf(msg1) + "  " + String.valueOf(msg2));  
            }


        } 
        }

      }
}
4

2 回答 2

1

消除

return null; 

在开始doInBackground方法并关闭此方法时插入右大括号并删除代码的最后一个大括号。

@Override
protected String doInBackground(String... params) {
    URL url = null;
    DefaultHttpClient httpclient = null;
    try {
        String registrationUrl = "http://10.0.2.2/SensorInfo/GetLightData?sensor=light";
        url = new URL(registrationUrl);

        HttpGet getRequest = new HttpGet(registrationUrl);
        ResponseHandler<String> handler = new BasicResponseHandler();
        httpclient = new DefaultHttpClient();
        // request data from server
        String result = httpclient.execute(getRequest, handler);
        Log.d("MyApp", "Data from server is "+ result);
    }
    catch (Exception ex) {Log.e("error",ex.toString());
        ex.printStackTrace();
    }
}
于 2013-03-17T16:30:53.770 回答
0

这些只是语法错误,与AsyncTask.

格式化您的代码 (Ctrl-Shift-F) 将使解决此问题变得更加容易!

您在方法之后缺少一个大括号doInBackground,需要return null从头到尾移动。

    @Override
    protected String doInBackground(String... params) {
        URL url = null;

        DefaultHttpClient httpclient = null;

        try {

            String registrationUrl = "http://10.0.2.2/SensorInfo/GetLightData?sensor=light";
            url = new URL(registrationUrl);

            HttpGet getRequest = new HttpGet(registrationUrl);
            ResponseHandler<String> handler = new BasicResponseHandler();
            httpclient = new DefaultHttpClient();
            // request data from server
            String result = httpclient.execute(getRequest, handler);
            Log.d("MyApp", "Data from server is " + result);
        } catch (Exception ex) {
            Log.e("error", ex.toString());
            ex.printStackTrace();

        }

       return null;
    } // THIS HERE

    @Override
    protected void onPostExecute(String result) {
        TextView text1 = (TextView) findViewById(R.id.text);

        //Sets the new text to TextView (runtime click event)//*******
        text1.setText("Light Data= " + result);

        Toast.makeText(this, "Light Data:" + result, Toast.LENGTH_SHORT).show(); //MESSAGE BOX
        //txtMessage.setText(String.valueOf(msg1) + "  " + String.valueOf(msg2));
    }

我检查了你的代码,我认为下面的代码可能有效(虽然我只是在 StackOverflow 上做了这个,但它可能会给你更多的线索,你哪里出错了:

        @Override
        protected String doInBackground(String... params) {
            String result = "Failed";
            try {
                String registrationUrl = "http://10.0.2.2/SensorInfo/GetLightData?sensor=light";
                // request data from server
                URL url = new URL(registrationUrl);
                HttpGet getRequest = new HttpGet(registrationUrl);
                DefaultHttpClient httpclient = new DefaultHttpClient();

                HttpResponse response = httpclient.execute(getRequest);
                result = convertStreamToString(response.getEntity().getContent());
                Log.d("MyApp", "Data from server is " + result);
            } catch (Exception ex) {
                Log.e("MyApp", "Failed to load light data", ex);
            }

           return result;
        } // THIS HERE

        @Override
        protected void onPostExecute(String result) {
            TextView text1 = (TextView) findViewById(R.id.text);
            text1.setText("Light Data= " + result);

            Toast.makeText(MainActivity.this, "Light Data:" + result, Toast.LENGTH_SHORT).show();
        }

     public String convertStreamToString(InputStream inputStream) throws IOException {
        if (inputStream != null) {
            Writer writer = new StringWriter();

            char[] buffer = new char[1024];
            try {
                Reader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"),1024);
                int n;
                while ((n = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, n);
                }
            } finally {
                inputStream.close();
            }
            return writer.toString();
        } else {
            return "";
        }
    }
于 2013-03-17T16:33:44.693 回答