Java 解析用户搜索

Java 解析用户搜索,java,android,xml,parse-platform,Java,Android,Xml,Parse Platform,我正在尝试为我的应用程序创建一个简单的用户搜索页面。我试图创建一个ParseQuery并在我的主活动页面的Listview中显示结果。然而,当我运行程序时,我无法得到搜索结果,程序什么也不显示。如果我得到答案,我会很高兴的 这是我的MainActivity.java package com.example.searchtest; import java.util.ArrayList; import java.util.List; import com.parse.*; import and

我正在尝试为我的应用程序创建一个简单的用户搜索页面。我试图创建一个ParseQuery并在我的主活动页面的Listview中显示结果。然而,当我运行程序时,我无法得到搜索结果,程序什么也不显示。如果我得到答案,我会很高兴的

这是我的MainActivity.java

package com.example.searchtest;

import java.util.ArrayList;
import java.util.List;

import com.parse.*;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity {

    private Button search;
    private EditText searchArea;
    private ListView userList;
    private String uName;
    private ArrayAdapter<ParseUser> mainAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Parse.initialize(this, "WHz2GmkGFIUxBir6ZEDt2FIG4WUcE1kfKZmPayxy", "IAs1RCaRt5LM1E1ZW7LFXy5uDjtZEQ5CDa3LKJt2");

        setContentView(R.layout.activity_main);


        search = (Button) findViewById(R.id.searchButton);
        searchArea = (EditText) findViewById(R.id.searchField);
        userList = (ListView) findViewById(R.id.results);

        mainAdapter = new ArrayAdapter<ParseUser>(this, R.layout.activity_main, R.layout.search_list );
        //mainAdapter.setTextKey("username");

        userList.setAdapter(mainAdapter);
        //mainAdapter.loadObjects();

        uName = searchArea.getText().toString();

        search.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ParseQuery<ParseUser> query = ParseUser.getQuery();
                query.whereEqualTo("username", uName);

                query.findInBackground(new FindCallback<ParseUser>() {
                  public void done(List<ParseUser> objects, ParseException e) {
                    if (e == null) {
                        for(int i=0; i<objects.size();i++)
                        {
                            mainAdapter.add((ParseUser)objects.get(i));
                        }

                    } else {
                        // Something went wrong.
                        e.printStackTrace();
                    }
                  }
                });

                userList.setAdapter(mainAdapter);
            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
package com.example.searchtest;
导入java.util.ArrayList;
导入java.util.List;
导入com.parse.*;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
公共类MainActivity扩展了ActionBarActivity{
私人按钮搜索;
私人编辑文本搜索区;
私有ListView用户列表;
私有字符串uName;
专用阵列适配器主适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
初始化(这是“WHz2GmkGFIUxBir6ZEDt2FIG4WUcE1kfKZmPayxy”,“IAs1RCaRt5LM1E1ZW7LFXy5uDjtZEQ5CDa3LKJt2”);
setContentView(R.layout.activity_main);
search=(按钮)findviewbyd(R.id.searchButton);
searchArea=(EditText)findViewById(R.id.searchField);
userList=(ListView)findViewById(R.id.results);
mainAdapter=new ArrayAdapter(此,R.layout.activity\u main,R.layout.search\u列表);
//mainAdapter.setTextKey(“用户名”);
setAdapter(mainAdapter);
//mainAdapter.loadObjects();
uName=searchArea.getText().toString();
search.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
ParseQuery=ParseUser.getQuery();
查询:whereEqualTo(“用户名”,uName);
findInBackground(新的FindCallback(){
公共void done(列出对象,parsee异常){
如果(e==null){

对于(int i=0;iput uName=searchArea.getText().toString();在侦听器中,创建视图时只需设置一次uName,因此视图将为空。您需要在用户输入输入并单击按钮后获取文本。

我解决了此问题。以下是代码的更新版本

package com.example.searchtest;

import java.util.ArrayList;
import java.util.List;

import com.parse.*;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    private Button search;
    private EditText searchArea;
    private ListView userList;
    //private String uName;
    private ArrayAdapter<ParseUser> mainAdapter;
    private ArrayList<ParseUser> resultList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Parse.initialize(this, "WHz2GmkGFIUxBir6ZEDt2FIG4WUcE1kfKZmPayxy", "IAs1RCaRt5LM1E1ZW7LFXy5uDjtZEQ5CDa3LKJt2");

        setContentView(R.layout.activity_main);


        search = (Button) findViewById(R.id.searchButton);
        searchArea = (EditText) findViewById(R.id.searchField);
        userList = (ListView) findViewById(R.id.userResultList);
        resultList = new ArrayList<ParseUser>();
        mainAdapter = new ArrayAdapter<ParseUser>(this, R.layout.list_item, R.id.user_results,resultList);
        //mainAdapter.setTextKey("username");

        //userList.setAdapter(mainAdapter);
        //mainAdapter.loadObjects();



        search.setOnClickListener(new OnClickListener() {



            @Override
            public void onClick(View v) {

                final String uName = searchArea.getText().toString();

                final ParseQuery<ParseUser> query = ParseUser.getQuery();
                query.whereEqualTo("username", uName);

                query.findInBackground(new FindCallback<ParseUser>() {
                  public void done(List<ParseUser> objects, ParseException e) {
                    if (e == null) {

                           for(int i=0; i<objects.size();i++)
                            {
                                resultList.add((ParseUser)objects.get(i));
                            }
                           userList.setAdapter(mainAdapter);

                        Toast.makeText(getApplicationContext(), "User is Found",
                                Toast.LENGTH_LONG).show();

                    } else {
                        // Something went wrong.
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), "User is not Found",
                                Toast.LENGTH_LONG).show();
                    }
                  }
                });

                userList.setAdapter(mainAdapter);
            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
package com.example.searchtest;
导入java.util.ArrayList;
导入java.util.List;
导入com.parse.*;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展了ActionBarActivity{
私人按钮搜索;
私人编辑文本搜索区;
私有ListView用户列表;
//私有字符串uName;
专用阵列适配器主适配器;
私有ArrayList结果列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
初始化(这是“WHz2GmkGFIUxBir6ZEDt2FIG4WUcE1kfKZmPayxy”,“IAs1RCaRt5LM1E1ZW7LFXy5uDjtZEQ5CDa3LKJt2”);
setContentView(R.layout.activity_main);
search=(按钮)findviewbyd(R.id.searchButton);
searchArea=(EditText)findViewById(R.id.searchField);
userList=(ListView)findViewById(R.id.userResultList);
结果列表=新的ArrayList();
mainAdapter=newarrayadapter(这个,R.layout.list_项,R.id.user_结果,resultList);
//mainAdapter.setTextKey(“用户名”);
//setAdapter(mainAdapter);
//mainAdapter.loadObjects();
search.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
最后一个字符串uName=searchArea.getText().toString();
final ParseQuery=ParseUser.getQuery();
查询:whereEqualTo(“用户名”,uName);
findInBackground(新的FindCallback(){
公共void done(列出对象,parsee异常){
如果(e==null){
对于(int i=0;i

没有更改。我仍然无法获得搜索结果。回调中是否出现异常?是否打印
uName
的值以确认传入了正确的数据?是否在回调中检查列表的大小?是否调用
notifyDataSetChanged()
更新
适配器后
。逐步调试并检查uName和查询的值。
package com.example.searchtest;

import java.util.ArrayList;
import java.util.List;

import com.parse.*;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    private Button search;
    private EditText searchArea;
    private ListView userList;
    //private String uName;
    private ArrayAdapter<ParseUser> mainAdapter;
    private ArrayList<ParseUser> resultList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Parse.initialize(this, "WHz2GmkGFIUxBir6ZEDt2FIG4WUcE1kfKZmPayxy", "IAs1RCaRt5LM1E1ZW7LFXy5uDjtZEQ5CDa3LKJt2");

        setContentView(R.layout.activity_main);


        search = (Button) findViewById(R.id.searchButton);
        searchArea = (EditText) findViewById(R.id.searchField);
        userList = (ListView) findViewById(R.id.userResultList);
        resultList = new ArrayList<ParseUser>();
        mainAdapter = new ArrayAdapter<ParseUser>(this, R.layout.list_item, R.id.user_results,resultList);
        //mainAdapter.setTextKey("username");

        //userList.setAdapter(mainAdapter);
        //mainAdapter.loadObjects();



        search.setOnClickListener(new OnClickListener() {



            @Override
            public void onClick(View v) {

                final String uName = searchArea.getText().toString();

                final ParseQuery<ParseUser> query = ParseUser.getQuery();
                query.whereEqualTo("username", uName);

                query.findInBackground(new FindCallback<ParseUser>() {
                  public void done(List<ParseUser> objects, ParseException e) {
                    if (e == null) {

                           for(int i=0; i<objects.size();i++)
                            {
                                resultList.add((ParseUser)objects.get(i));
                            }
                           userList.setAdapter(mainAdapter);

                        Toast.makeText(getApplicationContext(), "User is Found",
                                Toast.LENGTH_LONG).show();

                    } else {
                        // Something went wrong.
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), "User is not Found",
                                Toast.LENGTH_LONG).show();
                    }
                  }
                });

                userList.setAdapter(mainAdapter);
            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- Single ListItem -->

    <!-- Product Name -->
    <TextView android:id="@+id/user_results"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:textSize="16dip"
        android:textStyle="bold"/>    

</LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.searchtest.MainActivity" >

    <EditText
        android:id="@+id/searchField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="29dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/searchButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText1"
        android:layout_alignParentRight="true"
        android:text="Search" />

    <ListView
        android:id="@+id/userResultList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/searchField"
        android:layout_below="@+id/searchField"
        android:layout_marginTop="39dp" >
    </ListView>

</RelativeLayout>