【问题标题】:How can i send data from json? [closed]如何从 json 发送数据? [关闭]
【发布时间】:2014-12-11 16:35:09
【问题描述】:

我正在构建一个 android 应用程序,用户在其中登录并输入姓名、MailId 和生日等基本信息。

我想在我的服务器中解析所有这些数据,我创建了一个 API 链接,它将所有用户信息保存在服务器数据库中。

现在的问题是我怎样才能将此用户信息发送到该 API 链接。

这是我的代码 -

 public class RegisterActivity extends Activity {
Button btnRegister;
Button btnLinkToLogin;
EditText inputFullName;
EditText inputEmail;
EditText inputprofilepic;
TextView registerErrorMsg;

// JSON Response node names
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_PROFILEPIC = "profilepic";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);

    // Importing all assets like buttons, text fields
    //inputFullName = (EditText) findViewById(R.id.registerName);
    //inputEmail = (EditText) findViewById(R.id.registerEmail);
    //inputprofilepic = (EditText) findViewById(R.id.registerPassword);
    //btnRegister = (Button) findViewById(R.id.btnRegister);
    //btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
    //registerErrorMsg = (TextView) findViewById(R.id.register_error);

    // Register Button Click event
    //btnRegister.setOnClickListener(new View.OnClickListener() {           
        //public void onClick(View view) {
            String name = "hey";
            String email = "bbye";
            String profilepic = "thanks!";
            UserFunctions userFunction = new UserFunctions();
            JSONObject json = userFunction.registerUser(name, email, profilepic);

            // check for login response
            try {
                if (json.getString(KEY_SUCCESS) != null) {
                    //registerErrorMsg.setText("");
                    String res = json.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(res) == 1){
                        // user successfully registred
                        // Store user details in SQLite Database
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        // Clear all previous data in database
                        userFunction.logoutUser(getApplicationContext());
                        db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), 
             json.getString(KEY_PROFILEPIC));                       
                        // Launch Dashboard Screen
                        Intent dashboard = new Intent(getApplicationContext(),  
      DashboardActivity.class);
                        // Close all views before launching Dashboard
                        dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(dashboard);
                        // Close Registration Screen
                        finish();
                    }else{
                        // Error in registration
                        //registerErrorMsg.setText("Error occured in registration");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        //}
    //});

    // Link to Login Screen
    //btnLinkToLogin.setOnClickListener(new View.OnClickListener() {

        //public void onClick(View view) {

            // Close Registration View
            //finish();
        //}
    //});
}
}

这是我的 json 代码 -

 public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
        Log.e("JSON", json);
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);            
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}
}

这是我的用户函数代码 -

public class UserFunctions {

private JSONParser jsonParser;


private static String registerURL = "http://url";

private static String login_tag = "login";
private static String register_tag = "register";

// constructor
public UserFunctions(){
    jsonParser = new JSONParser();
}

/**
 * function make Login Request
 * @param email
 * @param password
 * */
public JSONObject loginUser(String email, String profilepic){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("profilepic", profilepic));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    // Log.e("JSON", json.toString());
    return json;
}

/**
 * function make Login Request
 * @param name
 * @param email
 * @param password
 * */
public JSONObject registerUser(String name, String email, String profilepic){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", register_tag));
    params.add(new BasicNameValuePair("name", name));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("profilepic", profilepic));

    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
    // return json
    return json;
}

/**
 * Function get Login status
 * */
public boolean isUserLoggedIn(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount();
    if(count > 0){
        // user logged in
        return true;
    }
    return false;
}

/**
 * Function to logout user
 * Reset Database
 * */
public boolean logoutUser(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    db.resetTables();
    return true;
}

   }

【问题讨论】:

  • 有几个代码示例可用于在服务器中发送 JSON 数据
  • 我试过了但是有错误!移至该代码屏幕时,我的应用程序被取消赎回权
  • 发布你的代码..没有代码就不可能解决
  • 好的,请稍等,我正在编辑我的问题并在其中发布问题!
  • 试试这个 hmkcode.com/android-send-json-data-to-server/ 这个 [2]: stackoverflow.com/questions/2540786/…

标签: android json


【解决方案1】:
public String postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

  try {
    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("name", myNameString));
    nameValuePairs.add(new BasicNameValuePair("password", myPasswordString));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();

    InputStream parse = entity.getContent();

    return getStringFromInputStream(parse);

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

    return "No Result !";
} 

 //convert InputStream to String
private  String getStringFromInputStream(InputStream is) {

    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();

    String line;
    try {

        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return sb.toString();
  }

【讨论】:

  • 谢谢 :) 让我试试这个!等等!!
  • 嘿,你能告诉我在 HttpEntity entity = execute.getEntity(); 中执行了什么吗?我是在局部变量中定义的吗
  • 我的坏...检查更新的代码
  • @感谢更新!!你能告诉我在我的回报它说 - Void 方法不能返回一个值.....你能帮我解决这个问题吗\
  • 只需检查更新的代码..我只是忘记将 void 更改为字符串..现在它将运行。如果它解决了您的问题,请接受答案
【解决方案2】:

尽量使用url发送数据,而不是json解析。

url1 = "http://"+ip+"/service.svc/AndPOMasterAdd?Auto=" + Auto + "&ClientId="+ ClientId +"&FinYr="+ FinYr +"&PDate="+ PDate +"&PTime ="+ PTime +"&SuppID="+ SuppID +"&City="+ City +"&Prodid="+ Prodid +"&Design="+ Design +"&Qty="+ Qty +"&Rate="+ Rate +"&ImgPName= "+ ImageName +"&CrBy="+ CRBY +"&CrDate="+ CRdate +"&Remark="+ Remark +"&ForBranch="+ ForBranch +"";

【讨论】:

  • 我该怎么做请你用例子解释一下
  • 你能解释一下吗!因为我很难定制
  • 把你的地址放在ip的位置,在上面放你的参数..
  • 好的,我了解 ip 的方式,但你能告诉我,我的参数是姓名、电子邮件和 profilepic.... 我要解析的数据是字符串 username、useremail 和 userprofilepic
  • 谢谢你能帮我多一点吗!
猜你喜欢
  • 2022-08-19
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 2015-02-13
  • 2016-03-08
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多