마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Mysql로 안드로이드와 서버연결했습니다, 데이터 조회에 관련하여 질문드립니다.

0 추천

안녕하세요. 순수하게 열심히 코드분석하며 이리저리 요리조리 열심히 보고 공부하는 학생입니다!

다름이아니라, APM_SETUP으로 제 컴퓨터를 서버로 두고

안드로이드와 서버와 연결하여 상품,가격을 insert하고 찾기버튼을 누르면 서버에 insert되어있는 모든 데이터를

읽어오도록까지는 했습니다.

그런데 욕심이 생겨서요..

EditText를 하나 생성해서 EditText에 입력된 값을 읽어와서 조회하려고 합니다.

조회대상은 가격이 아닌 상품명이구요.

그런데 여기저기 짜집기로 만든 소스라 어찌 손을 대야할지 모르겠네요..

책2권을 가지고 아무리 보고 또 봐도....ㅎㅎ....

고수님들께 손을 벌려보려 합니다 ㅠ.ㅠ

소스를 아래 첨부할테니 추가한 EditText에 상품명을 입력했을때 db로 접근하여

입력된 상품명을 조회해오는 코드좀.....염치없지만 부탁드립니다.

알려주시면 그걸가지고 또 공부하겠습니다!

java소스

public class Android_BookActivity extends Activity {
 private final String SERVER_ADDRESS = "http://127.0.0.1/Books";
 
 EditText edtname;
 EditText edtprice;
 Button btninsert;
 Button btnsearch;
 
 ListView list;
 ArrayList<String> data;
 ArrayAdapter<String> adapter;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        edtname = (EditText )findViewById(R.id.editText1);
        edtprice = (EditText )findViewById(R.id.editText2);
        btninsert = (Button )findViewById(R.id.button1);
        btnsearch = (Button )findViewById(R.id.button2);
       
        list = (ListView )findViewById(R.id.listView1);
        data = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, data);
        list.setAdapter(adapter);
       
        btninsert.setOnClickListener(new View.OnClickListener() { //입력 버튼을 눌렀을 때
   
   public void onClick(View v) {
    // TODO Auto-generated method stub
    
    if( edtname.getText().toString().equals("") ||
      edtprice.getText().toString().equals("") ) { //이름이나 가격중에 하나라도 입력이 안돼있을때
     Toast.makeText(Android_BookActivity.this,
       "이름이나 가격을 입력하세요", Toast.LENGTH_SHORT).show();
     return;
    }
     
     runOnUiThread(new Runnable() {

public void run() {
// TODO Auto-generated method stub
String name = edtname.getText().toString();
String price = edtprice.getText().toString();

try {
URL url = new URL(SERVER_ADDRESS + "/insert.php?"
+ "name=" + URLEncoder.encode(name, "UTF-8")
+ "&price=" + URLEncoder.encode(price, "UTF-8")); //변수값을 UTF-8로 인코딩하기 위해 URLEncoder를 이용하여 인코딩함
url.openStream(); //서버의 DB에 입력하기 위해 웹서버의 insert.php파일에 입력된 이름과 가격을 넘김

String result = getXmlData("insertresult.xml", "result"); //입력 성공여부

if(result.equals("1")) { //result 태그값이 1일때 성공
Toast.makeText(Android_BookActivity.this,
"DB insert 성공", Toast.LENGTH_SHORT).show();

edtname.setText("");
edtprice.setText("");
}
else //result 태그값이 1이 아닐때 실패
Toast.makeText(Android_BookActivity.this,
"DB insert 실패", Toast.LENGTH_SHORT).show();
} catch(Exception e) {
Log.e("Error", e.getMessage());
}
}
});
}
});

btnsearch.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

// TODO Auto-generated method stub
final Handler handler = new Handler();
runOnUiThread(new Runnable() {

public void run() {
// TODO Auto-generated method stub
final ProgressDialog dialog = ProgressDialog.show(
Android_BookActivity.this,
"불러오는중.....", "잠시만 기다려주세요.");

handler.post(new Runnable() {

public void run() {
// TODO Auto-generated method stub
try {
data.clear(); //반복적으로 누를경우 똑같은 값이 나오는 것을 방지하기 위해 data를 클리어함
URL url = new URL(SERVER_ADDRESS + "/search.php");
url.openStream(); //서버의 serarch.php파일을 실행함

ArrayList<String> namelist = getXmlDataList("searchresult.xml", "name");//name 태그값을 읽어 namelist 리스트에 저장
ArrayList<String> pricelist = getXmlDataList("searchresult.xml", "price"); //price 태그값을 읽어 prica 리스트에 저장

if(namelist.isEmpty())
data.add("아무것도 검색되지 않았습니다.");
else {
for(int i = 0; i < namelist.size(); i++) {
String str = namelist.get(i) + " - " + pricelist.get(i);
data.add(str);
}
}
} catch(Exception e) {
Log.e("Error", e.getMessage());
} finally{
dialog.dismiss();
adapter.notifyDataSetChanged();
}
}
});
}
});

}
});
}
부탁드립니다ㅠㅠ

샵프리 (120 포인트) 님이 2013년 11월 9일 질문
private String getXmlData(String filename, String str) { //태그값 하나를 받아오기위한 String형 함수
String rss = SERVER_ADDRESS + "/";
String ret = "";

try { //XML 파싱을 위한 과정
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
URL server = new URL(rss + filename);
InputStream is = server.openStream();
xpp.setInput(is, "UTF-8");

int eventType = xpp.getEventType();

while(eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG) {
if(xpp.getName().equals(str)) { //태그 이름이 str 인자값과 같은 경우
ret = xpp.nextText();
}
}
eventType = xpp.next();
}
} catch(Exception e) {
Log.e("Error", e.getMessage());
}

return ret;
}

private ArrayList<String> getXmlDataList(String filename, String str) { //태그값 여러개를 받아오기위한 ArrayList<String>형 변수
String rss = SERVER_ADDRESS + "/";
ArrayList<String> ret = new ArrayList<String>();

try { //XML 파싱을 위한 과정
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
URL server = new URL(rss + filename);
InputStream is = server.openStream();
xpp.setInput(is, "UTF-8");

int eventType = xpp.getEventType();

while(eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG) {
if(xpp.getName().equals(str)) { //태그 이름이 str 인자값과 같은 경우
ret.add(xpp.nextText());
}
}
eventType = xpp.next();
}
} catch(Exception e) {
Log.e("Error", e.getMessage());
}

return ret;
}


search.php 소스

<head>
<meta http-equiv = "content-Type" content = "text/html" charset = "utf-8">
</head> <!-- 한글 지원(DB는 utf-8_unicode_ci로 만들어주세요)을 위한 소스 -->
<?
$connect = mysql_connect("127.0.0.1", "root", "apmsetup");
mysql_selectdb("bookdb");
mysql_query("set names utf8"); //위와 마찬가지로 utf8을 지원하기 위한 소스

$qry = "select * from books";
$result = mysql_query($qry);

$xmlcode = "<?xml version = \"1.0\" encoding = \"utf-8\"?>\n";

while($obj = mysql_fetch_object($result))
{
$name = $obj->name;
$price = $obj->price;

$xmlcode .= "<node>\n"; //여러개가 나올 경우 xml에서 구분하기 쉽게 하기 위해서 node로 구분
$xmlcode .= "<name>$name</name>\n";
$xmlcode .= "<price>$price</price>\n";
$xmlcode .= "</node>\n";
}

$dir = "C:/APM_Setup/htdocs/Books"; //파일이 있을 디렉토리
$filename = $dir."/searchresult.xml"; //파일 이름

if (!function_exists('file_put_contents')) {
function file_put_contents($filename, $data) {
$f = @fopen($filename, 'w');
if (!$f) {
return false;
} else {
$bytes = fwrite($f, $data);
fclose($f);
return $bytes;
}
}
}
file_put_contents($filename, $xmlcode);
?>

}



부탁드립니다!ㅠ.ㅠ

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...