String id 에 추출한 번호 불러오는 방법

String id 에 추출한 번호 불러오는 방법

QA

String id 에 추출한 번호 불러오는 방법

본문

메인 자바 전체 소스입니다....


아래 소스중

String id = myPhoneNumber(MainActivity.this);

이부분이 문제 인데요....


여기에  

String id = "핸드폰번호";     <- 이처럼 전화번호를 직접 입력해서 빌드하면 정상 작동 합니다.
하지만  String id = myPhoneNumber(MainActivity.this);    
해서 내폰번호를 가져오기로 적용하면   작동을 안합니다

폰 번호 적용시 따옴표 안에 번호가 적혀져야지 정상 작동을 합니다..
머가 문제인 걸까요?    전화번호 불러오는 방식이 잘못 된걸까요?
아니면 스트링에 내번호 자동으로 불러오는 방식으로는 작동불가인 건가요??
메인페스트에 권한 지정은
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
이렇게 되어 있습니다.





package call.exam.jsh.telepo;

import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import android.os.AsyncTask;
import android.widget.TextView;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;


import static android.R.attr.name;

import static call.exam.jsh.telepo.R.layout.activity_main;



public class MainActivity extends AppCompatActivity {
private Button button;
private Button button1;
Button button2;
Button button3;

TextView txtview;
phpdo task;





@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_main);



button = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button1);


button2 = (Button) findViewById(R.id.Button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Pop.class));
}
});

button3 = (Button) findViewById(R.id.Button3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Pop1.class));
}
});





button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 사용자의 OS 버전이 마시멜로우 이상인지 체크한다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
/** * 사용자 단말기의 권한 중 "전화걸기" 권한이 허용되어 있는지 확인한다. * Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다.
*
*/
int permissionResult = checkSelfPermission(Manifest.permission.CALL_PHONE);
/** * 패키지는 안드로이드 어플리케이션의 아이디이다. * 현재 어플리케이션이 CALL_PHONE에 대해 거부되어있는지 확인한다. */
if (permissionResult == PackageManager.PERMISSION_DENIED) {
/** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. * 거부한적이 있으면 True를 리턴하고 * 거부한적이 없으면 False를 리턴한다. */
if (shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("권한이 필요합니다.")
.setMessage("이 기능을 사용하기 위해서는 단말기의 \"전화걸기\" 권한이 필요합니다. 계속 하시겠습니까?")
.setPositiveButton("네", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 * 버전체크를 다시 해준다. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
})
.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show();
}
})
.create()
.show();
}
// 최초로 권한을 요청할 때
else {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
// CALL_PHONE의 권한이 있을 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 휴대폰번호 노출방지 ***"));
startActivity(intent);
}
}
// 마시멜로우 미만의 버전일 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 휴대폰번호 노출방지 ***"));
startActivity(intent);
}
}
});

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 사용자의 OS 버전이 마시멜로우 이상인지 체크한다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
/** * 사용자 단말기의 권한 중 "전화걸기" 권한이 허용되어 있는지 확인한다. * Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다.
*
*/
int permissionResult = checkSelfPermission(Manifest.permission.CALL_PHONE);
/** * 패키지는 안드로이드 어플리케이션의 아이디이다. * 현재 어플리케이션이 CALL_PHONE에 대해 거부되어있는지 확인한다. */
if (permissionResult == PackageManager.PERMISSION_DENIED) {
/** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. * 거부한적이 있으면 True를 리턴하고 * 거부한적이 없으면 False를 리턴한다. */
if (shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("권한이 필요합니다.")
.setMessage("이 기능을 사용하기 위해서는 단말기의 \"전화걸기\" 권한이 필요합니다. 계속 하시겠습니까?")
.setPositiveButton("네", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 * 버전체크를 다시 해준다. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
})
.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show();
}
})
.create()
.show();
}
// 최초로 권한을 요청할 때
else {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000);
}
}
// CALL_PHONE의 권한이 있을 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 전화번호 노출방지 ***"));
startActivity(intent);
}
}
// 마시멜로우 미만의 버전일 때
else {
// 즉시 실행
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:*** 개인정보보호를 위한 전화번호 노출방지 ***"));
startActivity(intent);
}
}
});



String id = myPhoneNumber(MainActivity.this);
String name = "";


task = new phpdo();
txtview = (TextView) findViewById(R.id.txtView);

task.execute(id, name);


}




public static String myPhoneNumber(Context context) {
String myNumber = null;
TelephonyManager mgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try{
myNumber = mgr.getLine1Number();

myNumber = myNumber.replace("+82", "0");

myNumber = "'"+ myNumber+"'";


}catch(Exception e){}
return myNumber;
}




private class phpdo extends AsyncTask<String, Void, String> {

protected void onPreExecute() {

}


@Override
protected String doInBackground(String... arg0) {

try {
String id = arg0[0];

String link = "http://sun7684.dothome.co.kr/testquery.php?ID=" + id + "&NAME=" + name;
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

StringBuffer sb = new StringBuffer("");
String line = "";

while ((line = in.readLine()) != null) {
sb.append(line);
break;
}
in.close();
return sb.toString();
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}

}

@Override
protected void onPostExecute(String result) {
//txtview.setText("Login Successful");
txtview.setText(result);

}

}

}

이 질문에 댓글 쓰기 :

답변 2

우선 myPhoneNumber메소드의

catch 영역에 

Exception 이 빌생할때 어떤 오류인지 로그를 찍어보시고


따옴표 추가부분을 막고


myPhoneNumber를 호출한


String id =..

이후에서

id = "'"+id+''";

로 변경해서 시도해보심이 어떨까요?


이 내용들은 실제 컴파일과 실행을 확인해봐야 좀 명확할것 같긴합니다만


오류가 발생하는 영역에 try {} catch를 잘 활용하시면서 오류를 잡아

원인을 찾는게 중요합니다


잘 되는 방식과 안되는 방식을 설명해 놓으신게

"전번" 으로 되어야 한다하신것이 조금 애매한 느낌만 있는데

" 없이 어디까지 되는지를 찾는게 우산인거 같습니다

답변 감사합니다.
제가 초보자라서 소스나 로그 이런걸 잘 모릅니다
필요해서 구글링해서 짜집기 해서 만들고 있는 중이라서요 ㅠㅠ

내폰번호를 불러 오려고 하는 것은
그누보드 db 에 접속해서 핸드폰번호와 매칭된 회원포인트를  안드로이드 화면에 표시해 주려고
하는 것입니다

string id = "전화번호"        따옴표안에 그누보드에 가입된 실제 전화번호를 숫자로 직접 입력하면
정상적으로 회원포인트를 받아와서 안드로이드 화면에 보여줍니다

회원들마다 자기 포인트를 봐야 하기때문에  기기의 폰번호가 입력이 되어져야 하는 상황이거든요
저는 검색해서 소스를 가져다 맞춰서 이용할줄만 알지
실질적인 소스의 작동이나 이런것은 잘 모릅니다

이 부분은 너무 어렵네요
어찌 해야 할지 ㅠㅠㅠ

안드로이드 시작하는 입장이시면

https://opentutorials.org/module/2816/16162

여기서 동영상을 보면서 공부해보시는게 어떠실런지요

짜집기는
그 이후에 진행하시는게 더 좋으실수 있습니다
참.. 그전에 자바의 기본 문법은 익히시고 하시는게 더 좋습니다
답변을 작성하시기 전에 로그인 해주세요.
전체 131
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT