Parsing URL error - java

It didn't seem like there was a post about this, so here goes. I've been working on a simple app to grab my time table from my school, and get it on my phone. Currently I'm working on the port on android but I've hit an issue. I get the error:
java.io.IOException: -1 error loading URL urladress.
Code:
public void updateTimeTable(){
//Get UID and Birthday
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String uid = prefs.getString("uid", "000000");
String fods = prefs.getString("fodsdag", "000000");
//Set URL
String url = "http://unv1.aalborg-stu.dk/cgi-bin/elevskema.pl?ugen=0&unavn=" + uid + "&fodsdag=" + fods;
try {
Document doc = Jsoup.connect(url).get();
Elements td = doc.getElementsByTag("td");
//ArrayList<String> tdArray = new ArrayList<String>();
// for (Element tds : td) {
// String tdText = tds.text();
// tdArray.add(tdText);
//}
//String[] data = tdArray.toArray(new String[tdArray.size()]);
} catch (IOException e ){
Log.e("Parser", "shite", e);
}
Context context = getApplicationContext();
CharSequence text = url;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
I've commented some lines out to identify where the issue is, and it seems it's at the actual parsing. Anywho, screenshot of the error I get:
Screenshot
I got about 4 days worth of Java experience so forgive me if it's something silly.
Best Regards

Hmm.. hard to say like that, but in a lucky guess, did you set the internet permission in the manifest.xml ?
<uses-permission
android:name="android.permission.INTERNET" />

Related

Restfb - Why when I fetch my admined groups the app throws OAuthException: (#200) Permissions error (code 200, subcode null)

I'm programming in Java and I'm trying to fetch all the Facebook groups which I am the admin.
Thus, I've created an app called "Secrets" in Facebook Graph API Explorer and
checked all the permissions when I generated my ACCESS TOKEN.
For my Java app I'm using the library: restfb-1.18.0
The weird thing is that I'm getting the list of my admined groups but then
the app throws the exception: OAuthException: (#200) Permissions error (code 200, subcode null)
I don't know why i get this error.
Here is my code snippet:
String accessTokenGraphApiExplorer = "...";
FacebookClient fbClient = new DefaultFacebookClient(accessTokenGraphApiExplorer,Version.VERSION_2_0);
int counter = 0;
final String MY_FEEDS_PROPERTY = "me/groups";
String param = "groups,name";
Connection<Group> result = fbClient.fetchConnection(MY_FEEDS_PROPERTY, Group.class, Parameter.with("fields", param));
try {
for (List<Group> groupPage : result) {
for (Group group : groupPage) {
System.out.println(group.getName());
counter++;
}
}
System.out.println("# of Groups I admin: " + counter);
}
catch (Exception e) {
System.out.println(e);
}
How can I fix it ?

Get Mobile number from user device in android not using TeliphonecManager class TelephonyManager [duplicate]

How can I programmatically get the phone number of the device that is running my android app?
Code:
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
Required Permission:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Caveats:
According to the highly upvoted comments, there are a few caveats to be aware of. This can return null or "" or even "???????", and it can return a stale phone number that is no longer valid. If you want something that uniquely identifies the device, you should use getDeviceId() instead.
There is no guaranteed solution to this problem because the phone number is not physically stored on all SIM-cards, or broadcasted from the network to the phone. This is especially true in some countries which requires physical address verification, with number assignment only happening afterwards. Phone number assignment happens on the network - and can be changed without changing the SIM card or device (e.g. this is how porting is supported).
I know it is pain, but most likely the best solution is just to ask the user to enter his/her phone number once and store it.
Update: This answer is no longer available as Whatsapp had stopped exposing the phone number as account name, kindly disregard this answer.
There is actually an alternative solution you might want to consider, if you can't get it through telephony service.
As of today, you can rely on another big application Whatsapp, using AccountManager. Millions of devices have this application installed and if you can't get the phone number via TelephonyManager, you may give this a shot.
Permission:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Code:
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();
for (Account ac : accounts) {
String acname = ac.name;
String actype = ac.type;
// Take your time to look at all available accounts
System.out.println("Accounts : " + acname + ", " + actype);
}
Check actype for WhatsApp account
if(actype.equals("com.whatsapp")){
String phoneNumber = ac.name;
}
Of course you may not get it if user did not install WhatsApp, but its worth to try anyway.
And remember you should always ask user for confirmation.
So that's how you request a phone number through the Play Services API without the permission and hacks. Source and Full example.
In your build.gradle (version 10.2.x and higher required):
compile "com.google.android.gms:play-services-auth:$gms_version"
In your activity (the code is simplified):
#Override
protected void onCreate(Bundle savedInstanceState) {
// ...
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(Auth.CREDENTIALS_API)
.build();
requestPhoneNumber(result -> {
phoneET.setText(result);
});
}
public void requestPhoneNumber(SimpleCallback<String> callback) {
phoneNumberCallback = callback;
HintRequest hintRequest = new HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build();
PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);
try {
startIntentSenderForResult(intent.getIntentSender(), PHONE_NUMBER_RC, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
Logs.e(TAG, "Could not start hint picker Intent", e);
}
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PHONE_NUMBER_RC) {
if (resultCode == RESULT_OK) {
Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
if (phoneNumberCallback != null){
phoneNumberCallback.onSuccess(cred.getId());
}
}
phoneNumberCallback = null;
}
}
This will generate a dialog like this:
As posted in my earlier answer
Use below code :
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
In AndroidManifest.xml, give the following permission:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
But remember, this code does not always work, since Cell phone number is dependent on the SIM Card and the Network operator / Cell phone carrier.
Also, try checking in Phone--> Settings --> About --> Phone Identity, If you are able to view the Number there, the probability of getting the phone number from above code is higher. If you are not able to view the phone number in the settings, then you won't be able to get via this code!
Suggested Workaround:
Get the user's phone number as manual input from the user.
Send a code to the user's mobile number via SMS.
Ask user to enter the code to confirm the phone number.
Save the number in sharedpreference.
Do the above 4 steps as one time activity during the app's first launch. Later on, whenever phone number is required, use the value available in shared preference.
There is a new Android api that allows the user to select their phonenumber without the need for a permission. Take a look at:
https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html
// Construct a request for phone numbers and show the picker
private void requestHint() {
HintRequest hintRequest = new HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build();
PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
apiClient, hintRequest);
startIntentSenderForResult(intent.getIntentSender(),
RESOLVE_HINT, null, 0, 0, 0);
}
private String getMyPhoneNumber(){
TelephonyManager mTelephonyMgr;
mTelephonyMgr = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
return mTelephonyMgr.getLine1Number();
}
private String getMy10DigitPhoneNumber(){
String s = getMyPhoneNumber();
return s != null && s.length() > 2 ? s.substring(2) : null;
}
Code taken from http://www.androidsnippets.com/get-my-phone-number
Just want to add a bit here to above explanations in the above answers. Which will save time for others as well.
In my case this method didn't returned any mobile number, an empty string was returned. It was due to the case that I had ported my number on the new sim. So if I go into the Settings>About Phone>Status>My Phone Number it shows me "Unknown".
Sometimes, below code returns null or blank string.
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
With below permission
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
There is another way you will be able to get your phone number, I haven't tested this on multiple devices but above code is not working every time.
Try below code:
String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
main_data, "mimetype=?",
new String[]{"vnd.android.cursor.item/phone_v2"},
"is_primary DESC");
if (object != null) {
do {
if (!((Cursor) (object)).moveToNext())
break;
// This is the phoneNumber
String s1 = ((Cursor) (object)).getString(4);
} while (true);
((Cursor) (object)).close();
}
You will need to add these two permissions.
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
Hope this helps,
Thanks!
First of all getting users mobile number is against the Ethical policy, earlier it was possible but now as per my research there no solid solution available for this, By using some code it is possible to get mobile number but no guarantee may be it will work only in few device. After lot of research i found only three solution but they are not working in all device.
There is the following reason why we are not getting.
1.Android device and new Sim Card not storing mobile number if mobile number is not available in device and in sim then how it is possible to get number, if any old sim card having mobile number then using Telephony manager we can get the number other wise it will return the “null” or “” or “??????”
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
TelephonyManager tel= (TelephonyManager)this.getSystemService(Context.
TELEPHONY_SERVICE);
String PhoneNumber = tel.getLine1Number();
Note:- I have tested this solution in following device Moto x, Samsung Tab 4, Samsung S4, Nexus 5 and Redmi 2 prime but it doesn’t work every
time it return empty string so conclusion is it's useless
This method is working only in Redmi 2 prime, but for this need to add
read contact permission in manifest.
Note:- This is also not the guaranteed and efficient solution, I have tested this solution in many device but it worked only in Redmi 2 prime
which is dual sim device it gives me two mobile number first one is
correct but the second one is not belong to my second sim it belong to
my some old sim card which i am not using.
String main_data[] = {"data1", "is_primary", "data3", "data2", "data1",
"is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().
query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
main_data, "mimetype=?",
new String[]{"vnd.android.cursor.item/phone_v2"},
"is_primary DESC");
String s1="";
if (object != null) {
do {
if (!((Cursor) (object)).moveToNext())
break;
// This is the phoneNumber
s1 =s1+"---"+ ((Cursor) (object)).getString(4);
} while (true);
((Cursor) (object)).close();
}
In my research i have found earlier it was possible to get mobile number using WhatsApp account but now new Whatsapp version doesn’t storing user's mobile number.
Conclusion:- Android doesn’t have any guaranteed solution to get
user's mobile number programmatically.
Suggestion:- 1. If you want to verify user’s mobile number then ask to
user to provide his number, using otp you can can verify that.
If you want to identify the user’s device, for this you can easily get device IMEI number.
TelephonyManager is not the right solution, because in some cases the number is not stored in the SIM. I suggest that you should use the shared preference to store the user's phone number for the first time the application is open and the number will used whenever you need.
This is a more simplified answer:
public String getMyPhoneNumber()
{
return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
.getLine1Number();
}
Here's a combination of the solutions I've found (sample project here, if you want to also check auto-fill):
manifest
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
build.gradle
implementation "com.google.android.gms:play-services-auth:17.0.0"
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var googleApiClient: GoogleApiClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tryGetCurrentUserPhoneNumber(this)
googleApiClient = GoogleApiClient.Builder(this).addApi(Auth.CREDENTIALS_API).build()
if (phoneNumber.isEmpty()) {
val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
val intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest)
try {
startIntentSenderForResult(intent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0);
} catch (e: IntentSender.SendIntentException) {
Toast.makeText(this, "failed to show phone picker", Toast.LENGTH_SHORT).show()
}
} else
onGotPhoneNumberToSendTo()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_PHONE_NUMBER) {
if (resultCode == Activity.RESULT_OK) {
val cred: Credential? = data?.getParcelableExtra(Credential.EXTRA_KEY)
phoneNumber = cred?.id ?: ""
if (phoneNumber.isEmpty())
Toast.makeText(this, "failed to get phone number", Toast.LENGTH_SHORT).show()
else
onGotPhoneNumberToSendTo()
}
}
}
private fun onGotPhoneNumberToSendTo() {
Toast.makeText(this, "got number:$phoneNumber", Toast.LENGTH_SHORT).show()
}
companion object {
private const val REQUEST_PHONE_NUMBER = 1
private var phoneNumber = ""
#SuppressLint("MissingPermission", "HardwareIds")
private fun tryGetCurrentUserPhoneNumber(context: Context): String {
if (phoneNumber.isNotEmpty())
return phoneNumber
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val subscriptionManager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
try {
subscriptionManager.activeSubscriptionInfoList?.forEach {
val number: String? = it.number
if (!number.isNullOrBlank()) {
phoneNumber = number
return number
}
}
} catch (ignored: Exception) {
}
}
try {
val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val number = telephonyManager.line1Number ?: ""
if (!number.isBlank()) {
phoneNumber = number
return number
}
} catch (e: Exception) {
}
return ""
}
}
}
Add this dependency:
implementation 'com.google.android.gms:play-services-auth:18.0.0'
To fetch phone number list use this:
val hintRequest = HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build()
val intent = Credentials.getClient(context).getHintPickerIntent(hintRequest)
startIntentSenderForResult(
intent.intentSender,
PHONE_NUMBER_FETCH_REQUEST_CODE,
null,
0,
0,
0,
null
)
After tap on play services dialog:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent? {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == PHONE_NUMBER_FETCH_REQUEST_CODE) {
data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)?.id?.let {
useFetchedPhoneNumber(it)
}
}
}
A little contribution. In my case, the code launched an error exception. I have needed put an annotation that for the code be run and fix that problem. Here I let this code.
public static String getLineNumberPhone(Context scenario) {
TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
#SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
return mPhoneNumber;
}
For android version >= LOLLIPOP_MR1 :
Add permission :
And call this :
val subscriptionManager =
getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
val list = subscriptionManager.activeSubscriptionInfoList
for (info in list) {
Log.d(TAG, "number " + info.number)
Log.d(TAG, "network name : " + info.carrierName)
Log.d(TAG, "country iso " + info.countryIso)
}
}
I noticed several answers posting the same thing. First of all things changed as per 2021, onActivityResult is deprecated. Here is the non-deprecated solution.
private fun requestHint() {
val hintRequest = HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build()
val intent = Credentials.getClient(this).getHintPickerIntent(hintRequest)
val intentSender = IntentSenderRequest.Builder(intent.intentSender).build()
val resultLauncher = registerForActivityResult(
ActivityResultContracts.StartIntentSenderForResult()
) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val credential: Credential? = result.data?.getParcelableExtra(Credential.EXTRA_KEY)
// Phone number with country code
Log.i("mTag", "Selected phone No: ${credential?.id}")
}
}
resultLauncher.launch(intentSender)
}
Note: While many of you think this allows you to retrieve user's mobile phone number. That is usually not the case. Google Play Services has cached few phone numbers and sometimes the dialog shows phone numbers in which none belongs to user.
An important import com.google.android.gms.auth.api.credentials.Credential
Reference Documentation provides details but the code is somewhat deprecated.
Although it's possible to have multiple voicemail accounts, when calling from your own number, carriers route you to voicemail. So, TelephonyManager.getVoiceMailNumber() or TelephonyManager.getCompleteVoiceMailNumber(), depending on the flavor you need.
Hope this helps.
Wouldn't be recommending to use TelephonyManager as it requires the app to require READ_PHONE_STATE permission during runtime.
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Should be using Google's Play Service for Authentication, and it will able to allow User to select which phoneNumber to use, and handles multiple SIM cards, rather than us trying to guess which one is the primary SIM Card.
implementation "com.google.android.gms:play-services-auth:$play_service_auth_version"
fun main() {
val googleApiClient = GoogleApiClient.Builder(context)
.addApi(Auth.CREDENTIALS_API).build()
val hintRequest = HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build()
val hintPickerIntent = Auth.CredentialsApi.getHintPickerIntent(
googleApiClient, hintRequest
)
startIntentSenderForResult(
hintPickerIntent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0
)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_PHONE_NUMBER -> {
if (requestCode == Activity.RESULT_OK) {
val credential = data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)
val selectedPhoneNumber = credential?.id
}
}
}
}
If I'm getting number from voiceMailNumer then it is working good -
val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED
) {
Log.d("number", telephonyManager.voiceMailNumber.toString())
}
Firstly Initalize your sign in Intent like this
private val signInIntent = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
try {
val phoneNumber = Identity.getSignInClient(requireContext()).getPhoneNumberFromIntent(result.data)
// Note phone number will be in country code + phone number format
} catch (e: Exception) {
}
}
To open google play intent and show phone number associated with google account use this
val phoneNumberHintIntentRequest = GetPhoneNumberHintIntentRequest.builder()
.build()
Identity.getSignInClient(requireContext())
.getPhoneNumberHintIntent(phoneNumberHintIntentRequest)
.addOnSuccessListener { pendingIntent ->
signInIntent.launch(IntentSenderRequest.Builder(pendingIntent).build())
}.addOnFailureListener {
it.printStackTrace()
}
Note:
This will fail if user is disabled phone number sharing. If is it so user have to enable that from Settings -> Google -> Auto-fill -> Phone Number sharing
This will not working if you are using emulated device where play services is not available
while working on a security app which needed to get the phone number of who so ever my phone might get into their hands, I had to do this;
1. receive Boot completed and then try getting Line1_Number from telephonyManager which returns a string result.
2. compare the String result with my own phone number and if they don't match or string returns null then,
3. secretly send an SMS containing the string result plus a special sign to my office number.
4. if message sending fails, start a service and keep trying after each hour until sent SMS pending intent returns successful.
With this steps I could get the number of the person using my lost phone.
it doesn't matter if the person is charged.

Trying to turn off warnings in console but failing

My IRC bot sends the statistics of a video when a YouTube link is posted to the channel. But I get warnings in a huge number and they annoy me and just clutter my console:
Sep 01, 2014 6:09:29 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNUNG: CSS error: 'https://s.ytimg.com/yts/cssbin/www-core-vfl0pJopz.css' [1:41191] Fehler in Style-Regel. (Ungültiger Token "*". Erwartet wurde einer von: <EOF>, <S>, <IDENT>, "}", ";".)
Sep 01, 2014 6:09:29 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler warning
WARNUNG: CSS warning: 'https://s.ytimg.com/yts/cssbin/www-core-vfl0pJopz.css' [1:41191] Ignoriere die folgenden Deklarationen in dieser Regel.
I'd like to turn them off, and have tried to add this code to my main method:
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
But to no avail. I am using Selenium to get the results using this code:
String[] args = Utilities.toArgs(event.getMessage()); //this is the message sent, split by a space
String link = null;
boolean shortLink = false;
WebDriver driver = new HtmlUnitDriver();
String title = "No value";
String duration = "No value";
String views = "No value";
String likes = "No value";
String dislikes = "No value";
String date = "No value";
String uploader = "No value";
for(String s : args)
{
if(s.contains("www.youtube.com/watch"))
{
if(s.contains("v="))
link = "http://www.youtube.com/watch?v=" + s.split("v=")[1].substring(0, 11) + "/";
else
{
Utilities.chanMsg(event, "Couldn't find video id!"); //just sending a message to the channel
break;
}
}
else if(s.contains("http://youtu.be/"))
{
link = s;
shortLink = true;
break;
}
}
if(shortLink)
{
String videoId = link.split("/")[3];
link = "www.youtube.com/watch?v=" + videoId;
}
//if someone posts the link without a space between the link and the word before it
if(!link.startsWith("w"))
link = link.split(":")[1].substring(2);
//check that the link is really the link needed (main use is when someone posts a word directly after the link without a space inbetween)
if(link.length() != 35)
{
StringBuilder builder = new StringBuilder();
builder.append(link);
builder.delete(35, link.length());
link = builder.toString();
}
//make sure that the links starts with "http://"
if(!link.startsWith("http://"))
link = "http://" + link;
driver.get(link);
try
{
title = driver.findElement(By.xpath("//meta[#itemprop='name']")).getAttribute("content");
}
catch(NoSuchElementException e){}
try
{
duration = resolveDuration(driver);
}
catch(NoSuchElementException e){}
try
{
views = driver.findElement(By.xpath("//div[#class='watch-view-count']")).getText();
}
catch(NoSuchElementException e)
{
views = driver.findElement(By.xpath("//span[#class='watch-view-count yt-uix-hovercard-target']")).getText().split("Views")[0];
}
try
{
likes = driver.findElement(By.xpath("//button[#id='watch-like']/span[#class='yt-uix-button-content']")).getText();
}
catch(NoSuchElementException e){}
try
{
dislikes = driver.findElement(By.xpath("//button[#id='watch-dislike']/span[#class='yt-uix-button-content']")).getText();
}
catch(NoSuchElementException e){}
try
{
date = driver.findElement(By.xpath("//p[#id='watch-uploader-info']/strong")).getText().split("on")[1];
}
catch(NoSuchElementException e){}
try
{
uploader = driver.findElement(By.xpath("//div[#class='yt-user-info']/a")).getText();
}
catch(NoSuchElementException e){}
driver.close();
So how would I be able to suppress the warnings sent to the console?
You can handle this using Capabilities
Though these capabilities are browser specific.Say for firefox it would be like webdriver.log.driver. For more details you can refer the link below.
Desired Capabilities
More details on logging in Selenium Webdriver can be found here : Logging in Selenium
UPDATED : If you are using HtmlUnitDriver for which no browser is opened, You have to use your own logging system with proper configuration. You can go either for Log4j or SimpleLog library.
In case you use log4j, just add this line in a file commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
and keep the log4j.xml in the same folder where property file is kept.Normally the /src/main/resources: folder in case its a Maven Project.Then in log4j.xml you can configure your logging level as per your need.

Get filename from database and use it to populate an ImageView

I'm creating an app which at this point needs to get a filename from a sqlite database, get the image with that filename and insert it in an ImageView, i've created this code right now, but i think i'm doing everything wrong here...
Database db = new Database(getApplicationContext());
SQLiteDatabase readableDatabase = db.getReadableDatabase();
final Cursor curFileName = readableDatabase.rawQuery("select filename from data order by id asc", null);
image = (ImageView) findViewById(R.id.image);
int filename = curFileName.getColumnIndex("filename");
String filenameString = curFileName.getString(filename);
d = Drawable.createFromPath(Environment.getExternalStorageDirectory().toString()+filenameString);
Toast.makeText(getApplicationContext(), filenameString, Toast.LENGTH_SHORT).show();
handleDrawable(d);
yes sorry, this is the exception:
04-09 13:48:16.950: E/AndroidRuntime(30802): FATAL EXCEPTION: main
04-09 13:48:16.950: E/AndroidRuntime(30802): java.lang.RuntimeException: Unable to start activity ComponentInfo{g.d.filer/g.d.filer.Favorites}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 33
you must position the cursor before you can read
int filename = curFileName.getColumnIndex("filename");
if (cur.moveToFirst()) { // position cursor to first item. false: empty resultset
String filenameString = curFileName.getString(filename);
d = Drawable.createFromPath(Environment.getExternalStorageDirectory().toString()+filenameString);
Toast.makeText(getApplicationContext(), filenameString, Toast.LENGTH_SHORT).show();
handleDrawable(d);
...
}
Did you add
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
or
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
in the manifest file.
Because, beginning with Android 4.4, these permissions are not required if you're reading or writing only files that are private to your app. For more information, see
http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
I had edited my answer. I hope this will help u. :D
if (cursor.moveToFirst()){
do{
String data = cursor.getString(cursor.getColumnIndex("filename"));
// here you have to generate Image view and add bitmap to imageview
}while(cursor.moveToNext());
}
cursor.close()

Android: How to get the Serial Number as shown in About Device, Status with Java

On my Android Tablet I go to Settings -> About Device -> Status
In this screen I find a serial number with a length of 11 characters.
I would like to read this serial number with Java.
Anyone an idea how to do that?
Use
String x = Build.SERIAL
For more details check this out.
This is the device serial number.
For MDN or MEID of the device depending on which radio the phone uses (GSM or CDMA), try
TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();
and include the permission in the manifest file:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Very old question, but perhaps the solution from dev here still helps:
public static String getManufacturerSerialNumber() {
String serial = null;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
serial = (String) get.invoke(c, "ril.serialnumber", "unknown");
} catch (Exception ignored) {}
return serial;
}
Try this:
TextView tv = (TextView)findViewById(R.id.text);
String serial = Build.SERIAL;
tv.setText(serial);

Categories