2012-08-25 173 views
0

我想提交与当前位置的Android用户注册表单。我是新来的Android和Java开发。当我尝试访问我的名称值对代码中的myLat和myLan onLocationChanged方法时,无法找到这两个变量。我怎样才能访问我的名字值对代码中的两个变量。从另一种方法访问变量

package com.imran; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import com.google.android.gcm.GCMRegistrar; 
import com.google.android.maps.MyLocationOverlay; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
import android.app.Activity; 
import android.content.Context; 

public class Register extends Activity { 




    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     final EditText email_id = (EditText) findViewById(R.id.email_id) ; 
     final EditText name = (EditText) findViewById(R.id.name); 
     final EditText password = (EditText) findViewById(R.id.password); 
     Button button = (Button) findViewById(R.id.button1) ; 



     //generate GCM id 
     GCMRegistrar.checkDevice(this); 
     GCMRegistrar.checkManifest(this); 
     final String regId = GCMRegistrar.getRegistrationId(this); 
     if (regId.equals("")) { 
      GCMRegistrar.register(this, "12356"); 

     } else { 
     String TAG = null; 
     Log.v(TAG, regId); 

     } 
     //generate GCM id ended 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     //get current location 

     LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     LocationListener listner = new LocationListener() { 

      @Override 
      public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderEnabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderDisabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onLocationChanged(Location location) { 
       double myLonDouble = location.getLongitude(); 
      final String myLon = Double.toString(myLonDouble); 
       double myLatDouble = location.getLatitude(); 
       final String myLat = Double.toString(myLatDouble); 

      } 
     }; 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listner); 



     //end get current location 

     button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     //postData(); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://xyz.com/folder/register.php"); 

      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("email", email_id.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("name", name.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("regid", regId)); 
       nameValuePairs.add(new BasicNameValuePair("uid", "2")); 
       nameValuePairs.add(new BasicNameValuePair("lat",myLat)); 
       nameValuePairs.add(new BasicNameValuePair("lon",myLon)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       //Toast.makeText(this, resId, duration) 
       HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 

    } 
}); 

    } 


} 

回答

4

您应该研究scopemember variables。事情是,你不能在一种方法中声明一件事,然后尝试从另一种方法访问它。

因此,我们将该事物声明为成员变量,并将其定义为一个方法,然后可以在另一个方法中使用它。

像这样(我标志着我与**评论):

public class Register extends Activity { 

    // "private" means it can only be accessed from this class 
    private String myLat = null; // ** Declare myLat 
    private String myLon = null; // ** Declare myLon 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     final EditText email_id = (EditText) findViewById(R.id.email_id) ; 
     final EditText name = (EditText) findViewById(R.id.name); 
     final EditText password = (EditText) findViewById(R.id.password); 
     Button button = (Button) findViewById(R.id.button1) ; 



     //generate GCM id 
     GCMRegistrar.checkDevice(this); 
     GCMRegistrar.checkManifest(this); 
     final String regId = GCMRegistrar.getRegistrationId(this); 
     if (regId.equals("")) { 
      GCMRegistrar.register(this, "12356"); 

     } else { 
     String TAG = null; 
     Log.v(TAG, regId); 

     } 
     //generate GCM id ended 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     //get current location 

     LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     LocationListener listner = new LocationListener() { 

      @Override 
      public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderEnabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderDisabled(String arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onLocationChanged(Location location) { 
       double myLonDouble = location.getLongitude(); 
       myLon = Double.toString(myLonDouble); // ** Define myLon 
       double myLatDouble = location.getLatitude(); 
       myLat = Double.toString(myLatDouble); // ** Define myLat 

      } 
     }; 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listner); 



     //end get current location 

     button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     // ** Check if they have been defined 
     if (myLat == null || myLon == null) 
      return; 

     //postData(); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://xyz.com/folder/register.php"); 

      try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("email", email_id.getText().toString())); 
      nameValuePairs.add(new BasicNameValuePair("name", name.getText().toString())); 
      nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString())); 
      nameValuePairs.add(new BasicNameValuePair("regid", regId)); 
      nameValuePairs.add(new BasicNameValuePair("uid", "2")); 
      nameValuePairs.add(new BasicNameValuePair("lat",myLat)); 
      nameValuePairs.add(new BasicNameValuePair("lon",myLon)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
       //Toast.makeText(this, resId, duration) 
      HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      } 

     } 
    }); 

    } 


} 
+0

感谢您的支持和资源埃里克。 – imran

+0

没问题!祝你好运! :) – Eric

1

您的变量范围有问题。您正在初始化的myLatDouble和myLon Double只存在于创建它们的onLocationChanged方法中。您必须在不同的地方声明它们,以便在尝试访问它们时不会超出范围,或者您必须将它们作为参数传递给nameValuePairs代码。